# 定义编译器和编译选项
CXX = g++
CXXFLAGS = -std=c++11 -fPIC  # 添加 -fPIC 生成位置无关代码（动态库必需）

# 定义目标动态库名称
DYNAMIC_LIB = libdynamic.so

# 定义目标文件列表
OBJS = add.o sub.o mul.o rem.o

# 默认目标：构建动态库
all: $(DYNAMIC_LIB)

# 生成动态库规则（使用 -shared 选项）
$(DYNAMIC_LIB): $(OBJS)
	$(CXX) -shared -o $@ $^

# 编译各源文件为目标文件（添加 -c 选项）
add.o: add.cc
	$(CXX) $(CXXFLAGS) -c -o $@ $<

sub.o: sub.cc
	$(CXX) $(CXXFLAGS) -c -o $@ $<

mul.o: mul.cc
	$(CXX) $(CXXFLAGS) -c -o $@ $<

rem.o: rem.cc
	$(CXX) $(CXXFLAGS) -c -o $@ $<

# 创建发布目录结构并拷贝文件
.PHONY: create
create:
	mkdir -p mylib_dynamic/include
	mkdir -p mylib_dynamic/lib
	cp *.h mylib_dynamic/include     # 拷贝头文件
	cp $(DYNAMIC_LIB) mylib_dynamic/lib  # 修正为拷贝 .so 文件

# 清理生成文件
.PHONY: clean
clean:
	rm -rf $(OBJS) $(DYNAMIC_LIB) mylib_dynamic